﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once
#include "IModelingOperation.h"

namespace gcmp
{
    ///\brief 形体做布尔运算的类型
    enum class BooleanOperationTypes : int32_t
    {
        UnKnown = -1,   ///< 未知

        Intersect = 0,  ///< 布尔交

        Union = 1,      ///< 布尔并

        Substract = 2   ///< 布尔减
    };

    enum class GCMP_MODEL_INTERFACE_EXPORT SubstractByOtherElementsResult : Int32
    {
        Failure,  // 操作失败
        Success,  // 操作成功
        EmptyBodyLeft  // 操作成功，但本体被完成布尔掉了
    };

    /// \brief 布尔操作的接口
    ///
    /// 
    class GCMP_MODEL_INTERFACE_EXPORT IBoolOperation : public IModelingOperation
    {
    public:
        /// \brief 创建布尔操作
        /// 
        /// 该接口实现时，在布尔操作前未处理SecondBody的拓扑命名，因此暂时无法单独使用
        /// 如需使用，可使用GmElementModelingOperator中的接口
        /// \param boolType 布尔操作类型
        /// \return IBoolOperation
        static OwnerPtr<IBoolOperation> Create(BooleanOperationTypes boolType);
    };
}

